talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 8f65fc9f8be8d30ba67d8f4a64256e8645aa0dc1
parent 2a2a1bd7db0949e1763661b6098b31a6cd82f617
Author: Colin Leroy <colin@colino.net>
Date:   Mon, 16 Nov 2015 10:17:24 +0100

Merge branch 'master' of ssh+git://git.claws-mail.org/home/git/claws

Diffstat:
Msrc/addressbook.c | 2+-
Msrc/common/tlds.h | 17+++++++++++++++--
Msrc/compose.c | 24+++++++++++++-----------
Msrc/folderview.c | 2+-
Msrc/gtk/about.c | 30+++++++++++++++---------------
Msrc/gtk/gtkaspell.c | 4++--
Msrc/gtk/icon_legend.c | 4++--
Msrc/gtk/menu.c | 6++++--
Msrc/gtk/prefswindow.c | 2+-
Msrc/imap.c | 88++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/imap_gtk.c | 7++++---
Msrc/main.c | 9++++++---
Msrc/mainwindow.c | 2+-
Msrc/plugins/att_remover/att_remover.c | 6+++---
Msrc/plugins/attachwarner/attachwarner.c | 4++--
Msrc/plugins/gdata/cm_gdata_contacts.c | 5+++--
Msrc/plugins/libravatar/libravatar_prefs.c | 18+++++++++---------
Msrc/plugins/managesieve/sieve_editor.c | 2+-
Msrc/plugins/pgpcore/passphrase.c | 15+++++++++------
Msrc/plugins/pgpcore/select-keys.c | 2+-
Msrc/plugins/pgpcore/sgpgme.c | 3++-
Msrc/plugins/rssyl/rssyl_feed_props.c | 15++++++++-------
Msrc/plugins/rssyl/rssyl_subscribe_gtk.c | 2+-
Msrc/plugins/vcalendar/vcal_meeting_gtk.c | 8++++----
Msrc/plugins/vcalendar/vcalendar.c | 11+++++++----
Msrc/prefs_account.c | 5+++--
Msrc/prefs_actions.c | 6+++---
Msrc/prefs_filtering.c | 6+++---
Msrc/prefs_folder_item.c | 22+++++++++++-----------
Msrc/prefs_matcher.c | 4+++-
Msrc/prefs_template.c | 6+++---
Msrc/procheader.c | 2--
Msrc/summaryview.c | 8++++++--
Msrc/wizard.c | 42+++++++++++++++++++++++++++---------------
Atools/alternative-tlds.txt | 48++++++++++++++++++++++++++++++++++++++++++++++++
Mtools/claws.get.tlds.pl | 18++++++++++++++++--
36 files changed, 282 insertions(+), 173 deletions(-)

diff --git a/src/addressbook.c b/src/addressbook.c @@ -2919,7 +2919,7 @@ static void addressbook_treenode_delete_cb(GtkAction *action, gpointer data) "If you delete the folder only, the addresses it contains will be moved into the parent folder." ), obj->name ); aval = alertpanel( _("Delete folder"), message, - GTK_STOCK_CANCEL, _("+Delete _folder only"), _("Delete folder and _addresses")); + GTK_STOCK_CANCEL, g_strconcat("+",_("Delete _folder only"), NULL), _("Delete folder and _addresses")); g_free(message); if( aval == G_ALERTALTERNATE ) { delType = ADDRTREE_DEL_FOLDER_ONLY; diff --git a/src/common/tlds.h b/src/common/tlds.h @@ -6,7 +6,7 @@ #define __TLDS_H__ static const gchar *toplvl_domains [] = { - /* Version 2015111201, Last Updated Thu Nov 12 07:07:01 2015 UTC */ + /* Version 2015111300, Last Updated Fri Nov 13 07:07:01 2015 UTC */ "aaa", "aarp", "abb", "abbott", "abogado", "ac", "academy", "accenture", "accountant", "accountants", "aco", "active", "actor", "ad", "ads", @@ -206,7 +206,20 @@ static const gchar *toplvl_domains [] = { "xyz", "yachts", "yamaxun", "yandex", "ye", "yodobashi", "yoga", "yokohama", "youtube", "yt", "za", "zara", "zip", "zm", "zone", - "zuerich", "zw" + "zuerich", "zw", /* NameCoin */ + "bit", /* EmerCoin */ + "bazar", "coin", + "emc", "lib", /* Name.Space */ + "art", "books", "inc", + "music", "radio", "shop", "talk", "union", + /* OpenNIC */ + "bbs", "dyn", "free", "fur", "geek", + "gopher", "indy", "micro", "neo", "null", + "oss", "oz", "parody", "pirate", /* Tor Project */ + "onion", + /* GNU Name System */ + "gnu", /* Invisible Internet Project */ + "i2p" }; #endif diff --git a/src/compose.c b/src/compose.c @@ -3608,7 +3608,7 @@ static ComposeInsertResult compose_insert_file(Compose *compose, const gchar *fi "in the message body. Are you sure you want to do that?"), to_human_readable(file_stat.st_size)); aval = alertpanel_full(_("Are you sure?"), msg, GTK_STOCK_CANCEL, - _("+_Insert"), NULL, TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT); + g_strconcat("+", _("_Insert"), NULL), NULL, TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT); g_free(msg); /* do we ask for confirmation next time? */ @@ -3734,7 +3734,7 @@ static gboolean compose_attach_append(Compose *compose, const gchar *file, if (size == 0 && !compose->batch) { gchar * msg = g_strdup_printf(_("File %s is empty."), filename); AlertValue aval = alertpanel_full(_("Empty file"), msg, - GTK_STOCK_CANCEL, _("+_Attach anyway"), NULL, FALSE, + GTK_STOCK_CANCEL, g_strconcat("+", _("_Attach anyway"), NULL), NULL, FALSE, NULL, ALERT_WARNING, G_ALERTDEFAULT); g_free(msg); @@ -5024,7 +5024,7 @@ static gboolean compose_check_for_set_recipients(Compose *compose) } aval = alertpanel(_("Send"), _("The only recipient is the default CC address. Send anyway?"), - GTK_STOCK_CANCEL, _("+_Send"), NULL); + GTK_STOCK_CANCEL, g_strconcat("+", _("_Send"), NULL), NULL); if (aval != G_ALERTALTERNATE) return FALSE; } @@ -5056,7 +5056,7 @@ static gboolean compose_check_for_set_recipients(Compose *compose) } aval = alertpanel(_("Send"), _("The only recipient is the default BCC address. Send anyway?"), - GTK_STOCK_CANCEL, _("+_Send"), NULL); + GTK_STOCK_CANCEL, g_strconcat("+", _("_Send"), NULL), NULL); if (aval != G_ALERTALTERNATE) return FALSE; } @@ -5089,9 +5089,9 @@ static gboolean compose_check_entries(Compose *compose, gboolean check_everythin gchar *message; if (compose->sending) - button_label = _("+_Send"); + button_label = g_strconcat("+", _("_Send"), NULL); else - button_label = _("+_Queue"); + button_label = g_strconcat("+", _("_Queue"), NULL); message = g_strdup_printf(_("Subject is empty. %s"), compose->sending?_("Send it anyway?"): _("Queue it anyway?")); @@ -5612,7 +5612,8 @@ static gint compose_write_to_file(Compose *compose, FILE *fp, gint action, gbool msg = g_strdup_printf(_("Can't convert the character encoding of the message \n" "to the specified %s charset.\n" "Send it as %s?"), out_codeset, src_codeset); - aval = alertpanel_full(_("Error"), msg, GTK_STOCK_CANCEL, _("+_Send"), NULL, FALSE, + aval = alertpanel_full(_("Error"), msg, GTK_STOCK_CANCEL, + g_strconcat("+", _("_Send"), NULL), NULL, FALSE, NULL, ALERT_ERROR, G_ALERTDEFAULT); g_free(msg); @@ -5899,7 +5900,7 @@ static gboolean compose_warn_encryption(Compose *compose) return TRUE; val = alertpanel_full(_("Encryption warning"), warning, - GTK_STOCK_CANCEL, _("+C_ontinue"), NULL, + GTK_STOCK_CANCEL, g_strconcat("+", _("C_ontinue"), NULL), NULL, TRUE, NULL, ALERT_WARNING, G_ALERTALTERNATE); if (val & G_ALERTDISABLE) { val &= ~G_ALERTDISABLE; @@ -8147,7 +8148,7 @@ static GtkWidget *compose_account_option_menu_create(Compose *compose) if (ac == compose->account) def_menu = num; - name = g_markup_printf_escaped(_("<i>%s</i>"), + name = g_markup_printf_escaped("<i>%s</i>", ac->account_name); if (ac == compose->account) { @@ -10323,7 +10324,8 @@ static void compose_close_cb(GtkAction *action, gpointer data) } else { val = alertpanel(_("Save changes"), _("This message has been modified. Save the latest changes?"), - _("_Don't save"), _("+_Save to Drafts"), GTK_STOCK_CANCEL); + _("_Don't save"), g_strconcat("+", _("_Save to Drafts"), NULL), + GTK_STOCK_CANCEL); } g_mutex_unlock(compose->mutex); switch (val) { @@ -11257,7 +11259,7 @@ static void compose_insert_drag_received_cb (GtkWidget *widget, val = alertpanel_full(_("Insert or attach?"), _("Do you want to insert the contents of the file(s) " "into the message body, or attach it to the email?"), - GTK_STOCK_CANCEL, _("+_Insert"), _("_Attach"), + GTK_STOCK_CANCEL, g_strconcat("+", _("_Insert"), NULL), _("_Attach"), TRUE, NULL, ALERT_QUESTION, G_ALERTALTERNATE); break; case COMPOSE_DND_INSERT: diff --git a/src/folderview.c b/src/folderview.c @@ -2378,7 +2378,7 @@ static void folderview_empty_trash_cb(GtkAction *action, gpointer data) if (prefs_common.ask_on_clean) { if (alertpanel(_("Empty trash"), _("Delete all messages in trash?"), - GTK_STOCK_CANCEL, _("+_Empty trash"), NULL) != G_ALERTALTERNATE) + GTK_STOCK_CANCEL, g_strconcat("+", _("_Empty trash"), NULL), NULL) != G_ALERTALTERNATE) return; } diff --git a/src/gtk/about.c b/src/gtk/about.c @@ -163,28 +163,28 @@ static GtkWidget *about_create_child_page_info(void) #if HAVE_SYS_UTSNAME_H uname(&utsbuf); - g_snprintf(buf, sizeof(buf), - _("GTK+ %d.%d.%d / GLib %d.%d.%d\n" - "Locale: %s (charset: %s)\n" - "Operating System: %s %s (%s)"), + g_snprintf(buf, sizeof(buf),g_strconcat( + "GTK+ %d.%d.%d / GLib %d.%d.%d\n", + _("Locale: %s (charset: %s)\n" + "Operating System: %s %s (%s)"), NULL), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, conv_get_current_locale(), conv_get_locale_charset_str(), utsbuf.sysname, utsbuf.release, utsbuf.machine); #elif defined(G_OS_WIN32) - g_snprintf(buf, sizeof(buf), - _("GTK+ %d.%d.%d / GLib %d.%d.%d\n" - "Locale: %s (charset: %s)\n" - "Operating System: %s"), + g_snprintf(buf, sizeof(buf),g_strconcat( + "GTK+ %d.%d.%d / GLib %d.%d.%d\n", + _("Locale: %s (charset: %s)\n" + "Operating System: %s"), NULL), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, conv_get_current_locale(), conv_get_locale_charset_str(), "Win32"); #else - g_snprintf(buf, sizeof(buf), - _("GTK+ %d.%d.%d / GLib %d.%d.%d\n" - "Locale: %s (charset: %s)\n" - "Operating System: unknown"), + g_snprintf(buf, sizeof(buf),g_strconcat( + "GTK+ %d.%d.%d / GLib %d.%d.%d\n", + _("Locale: %s (charset: %s)\n" + "Operating System: unknown"), NULL), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, conv_get_current_locale(), conv_get_locale_charset_str()); @@ -563,13 +563,13 @@ static GtkWidget *about_create_child_page_license(void) "underline", PANGO_UNDERLINE_SINGLE, NULL); - gtk_text_buffer_insert(buffer, &iter, + gtk_text_buffer_insert(buffer, &iter, g_strconcat( _("You should have received a copy of the GNU General Public License " - "along with this program. If not, see <"), -1); + "along with this program. If not, see "), "<", NULL), -1); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "http://www.gnu.org/licenses/", -1, "link", NULL); - gtk_text_buffer_insert(buffer, &iter, _(">. \n\n"), -1); + gtk_text_buffer_insert(buffer, &iter, ">. \n\n", -1); g_signal_connect(G_OBJECT(tag), "event", G_CALLBACK(about_textview_uri_clicked), text); diff --git a/src/gtk/gtkaspell.c b/src/gtk/gtkaspell.c @@ -1456,8 +1456,8 @@ static void replace_with_create_dialog_cb(GtkWidget *w, gpointer data) utf8buf = g_strdup(gtkaspell->theword); - thelabel = g_strdup_printf(_("<span weight=\"bold\" " - "size=\"larger\">Replace \"%s\" with: </span>"), + thelabel = g_strdup_printf(g_strconcat("<span weight=\"bold\" size=\"larger\">", + _("Replace \"%s\" with: "), "</span>", NULL), utf8buf); icon = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, diff --git a/src/gtk/icon_legend.c b/src/gtk/icon_legend.c @@ -137,9 +137,9 @@ static void legend_create(void) gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - label = gtk_label_new(_("<span weight=\"bold\">The following icons " + label = gtk_label_new(g_strconcat("<span weight=\"bold\">",_("The following icons " "are used to show the status of messages and " - "folders:</span>")); + "folders:"), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_widget_show(label); diff --git a/src/gtk/menu.c b/src/gtk/menu.c @@ -134,9 +134,11 @@ GtkWidget *cm_menu_item_new_label_from_url(gchar *url) url[64] = '\0', url[63] = url[62] = url[61] = '.', url[60] = ' '; GtkWidget *newlabel = gtk_menu_item_new_with_label(url); gtk_widget_set_tooltip_markup(GTK_WIDGET(newlabel), - _("<span><b>Warning:</b> This URL was too long for displaying and\n" + g_strconcat("<span><b>", _("Warning:"), "</b>", + _("This URL was too long for displaying and\n" "has been truncated for safety. This message could be\n" - "corrupted, malformed or part of some DoS attempt.</span>")); + "corrupted, malformed or part of some DoS attempt."), + "</span>", NULL)); return newlabel; } diff --git a/src/gtk/prefswindow.c b/src/gtk/prefswindow.c @@ -320,7 +320,7 @@ static void prefswindow_build_tree(GtkWidget *tree_view, GSList *prefs_pages, gtk_tree_model_foreach(GTK_TREE_MODEL(store), (GtkTreeModelForeachFunc) find_node_by_name, &find_name); - if (find_name.found && page->path[i] != page->path[i-1]) { + if (i > 0 && find_name.found && page->path[i] != page->path[i-1]) { node = find_name.node; gtk_tree_model_get(GTK_TREE_MODEL(store), &node, PREFS_PAGE_DATA, &prefs_node, diff --git a/src/imap.c b/src/imap.c @@ -618,134 +618,134 @@ static void imap_handle_error(Session *session, const gchar *server, int libetpa case MAILIMAP_NO_ERROR: return; case MAILIMAP_NO_ERROR_AUTHENTICATED: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: authenticated\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" authenticated\n"), NULL), session_server); break; case MAILIMAP_NO_ERROR_NON_AUTHENTICATED: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: not authenticated\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" not authenticated\n"), NULL), session_server); break; case MAILIMAP_ERROR_BAD_STATE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: bad state\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" bad state\n"), NULL), session_server); break; case MAILIMAP_ERROR_STREAM: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: stream error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" stream error\n"), NULL), session_server); break; case MAILIMAP_ERROR_PARSE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: parse error " - "(very probably non-RFC compliance from the server)\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" parse error " + "(very probably non-RFC compliance from the server)\n"), NULL), session_server); break; case MAILIMAP_ERROR_CONNECTION_REFUSED: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: connection refused\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" connection refused\n"), NULL), session_server); break; case MAILIMAP_ERROR_MEMORY: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: memory error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" memory error\n"), NULL), session_server); break; case MAILIMAP_ERROR_FATAL: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: fatal error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" fatal error\n"), NULL), session_server); break; case MAILIMAP_ERROR_PROTOCOL: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: protocol error" - "(very probably non-RFC compliance from the server)\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" protocol error " + "(very probably non-RFC compliance from the server)\n"), NULL), session_server); break; case MAILIMAP_ERROR_DONT_ACCEPT_CONNECTION: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: connection not accepted\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" connection not accepted\n"), NULL), session_server); break; case MAILIMAP_ERROR_APPEND: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: APPEND error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" APPEND error\n"), NULL), session_server); break; case MAILIMAP_ERROR_NOOP: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: NOOP error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" NOOP error\n"), NULL), session_server); break; case MAILIMAP_ERROR_LOGOUT: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: LOGOUT error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" LOGOUT error\n"), NULL), session_server); break; case MAILIMAP_ERROR_CAPABILITY: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: CAPABILITY error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" CAPABILITY error\n"), NULL), session_server); break; case MAILIMAP_ERROR_CHECK: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: CHECK error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" CHECK error\n"), NULL), session_server); break; case MAILIMAP_ERROR_CLOSE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: CLOSE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" CLOSE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_EXPUNGE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: EXPUNGE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" EXPUNGE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_COPY: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: COPY error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" COPY error\n"), NULL), session_server); break; case MAILIMAP_ERROR_UID_COPY: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: UID COPY error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" UID COPY error\n"), NULL), session_server); break; case MAILIMAP_ERROR_CREATE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: CREATE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" CREATE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_DELETE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: DELETE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" DELETE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_EXAMINE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: EXAMINE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" EXAMINE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_FETCH: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: FETCH error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" FETCH error\n"), NULL), session_server); break; case MAILIMAP_ERROR_UID_FETCH: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: UID FETCH error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" UID FETCH error\n"), NULL), session_server); break; case MAILIMAP_ERROR_LIST: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: LIST error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" LIST error\n"), NULL), session_server); break; case MAILIMAP_ERROR_LOGIN: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: LOGIN error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" LOGIN error\n"), NULL), session_server); break; case MAILIMAP_ERROR_LSUB: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: LSUB error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" LSUB error\n"), NULL), session_server); break; case MAILIMAP_ERROR_RENAME: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: RENAME error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" RENAME error\n"), NULL), session_server); break; case MAILIMAP_ERROR_SEARCH: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: SEARCH error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" SEARCH error\n"), NULL), session_server); break; case MAILIMAP_ERROR_UID_SEARCH: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: UID SEARCH error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" UID SEARCH error\n"), NULL), session_server); break; case MAILIMAP_ERROR_SELECT: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: SELECT error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" SELECT error\n"), NULL), session_server); break; case MAILIMAP_ERROR_STATUS: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: STATUS error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" STATUS error\n"), NULL), session_server); break; case MAILIMAP_ERROR_STORE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: STORE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" STORE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_UID_STORE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: UID STORE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" UID STORE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_SUBSCRIBE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: SUBSCRIBE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" SUBSCRIBE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_UNSUBSCRIBE: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: UNSUBSCRIBE error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" UNSUBSCRIBE error\n"), NULL), session_server); break; case MAILIMAP_ERROR_STARTTLS: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: STARTTLS error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" STARTTLS error\n"), NULL), session_server); break; case MAILIMAP_ERROR_INVAL: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: INVAL error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" INVAL error\n"), NULL), session_server); break; case MAILIMAP_ERROR_EXTENSION: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: EXTENSION error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" EXTENSION error\n"), NULL), session_server); break; case MAILIMAP_ERROR_SASL: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: SASL error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" SASL error\n"), NULL), session_server); break; #ifdef USE_GNUTLS case MAILIMAP_ERROR_SSL: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: SSL error\n"), session_server); + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" SSL error\n"), NULL), session_server); break; #endif default: - log_warning(LOG_PROTOCOL, _("IMAP error on %s: Unknown error [%d]\n"), + log_warning(LOG_PROTOCOL, g_strconcat(_("IMAP error on %s:"),_(" Unknown error [%d]\n"), NULL), session_server, libetpan_errcode); break; } diff --git a/src/imap_gtk.c b/src/imap_gtk.c @@ -512,8 +512,8 @@ static void subscribe_cb_full(FolderView *folderview, guint action) G_CALLBACK(chk_update_val), &recurse); avalue = alertpanel_full(_("Subscriptions"), message, - GTK_STOCK_CANCEL, _("+_Search"), NULL, FALSE, - rec_chk, ALERT_QUESTION, G_ALERTDEFAULT); + GTK_STOCK_CANCEL, g_strconcat("+", _("_Search"), NULL), + NULL, FALSE, rec_chk, ALERT_QUESTION, G_ALERTDEFAULT); g_free(message); if (avalue != G_ALERTALTERNATE) return; @@ -571,7 +571,8 @@ static void subscribe_cb_full(FolderView *folderview, guint action) G_CALLBACK(chk_update_val), &recurse); avalue = alertpanel_full(_("Subscriptions"), message, - GTK_STOCK_CANCEL, action?_("+_Subscribe"):_("+_Unsubscribe"), NULL, FALSE, + GTK_STOCK_CANCEL, action?g_strconcat("+", _("_Subscribe"), NULL): + g_strconcat("+", _("_Unsubscribe"), NULL), NULL, FALSE, rec_chk, ALERT_QUESTION, G_ALERTDEFAULT); g_free(message); if (avalue != G_ALERTALTERNATE) return; diff --git a/src/main.c b/src/main.c @@ -1133,13 +1133,16 @@ int main(int argc, char *argv[]) * and migration succeeded, and FALSE otherwise. */ if (is_dir_exist(OLD_GTK2_RC_DIR)) { - r = migrate_old_config(OLD_GTK2_RC_DIR, RC_DIR, _("Sylpheed-Claws 2.6.0 (or older)")); + r = migrate_old_config(OLD_GTK2_RC_DIR, RC_DIR, + g_strconcat("Sylpheed-Claws 2.6.0 ", _("(or older)"), NULL)); asked_for_migration = TRUE; } else if (is_dir_exist(OLDER_GTK2_RC_DIR)) { - r = migrate_old_config(OLDER_GTK2_RC_DIR, RC_DIR, _("Sylpheed-Claws 1.9.15 (or older)")); + r = migrate_old_config(OLDER_GTK2_RC_DIR, RC_DIR, + g_strconcat("Sylpheed-Claws 1.9.15 ",_("(or older)"), NULL)); asked_for_migration = TRUE; } else if (is_dir_exist(OLD_GTK1_RC_DIR)) { - r = migrate_old_config(OLD_GTK1_RC_DIR, RC_DIR, _("Sylpheed-Claws 1.0.5 (or older)")); + r = migrate_old_config(OLD_GTK1_RC_DIR, RC_DIR, + g_strconcat("Sylpheed-Claws 1.0.5 ",_("(or older)"), NULL)); asked_for_migration = TRUE; } else if (is_dir_exist(SYLPHEED_RC_DIR)) { r = migrate_old_config(SYLPHEED_RC_DIR, RC_DIR, "Sylpheed"); diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -4226,7 +4226,7 @@ static void mainwindow_check_synchronise(MainWindow *mainwin, gboolean ask) if (offline_ask_sync && ask && alertpanel(_("Folder synchronisation"), _("Do you want to synchronise your folders now?"), - GTK_STOCK_CANCEL, _("+_Synchronise"), NULL) != G_ALERTALTERNATE) + GTK_STOCK_CANCEL, g_strconcat("+", _("_Synchronise"), NULL), NULL) != G_ALERTALTERNATE) return; if (offline_ask_sync) diff --git a/src/plugins/att_remover/att_remover.c b/src/plugins/att_remover/att_remover.c @@ -296,9 +296,9 @@ static void fill_attachment_store(GtkTreeView *list_view, MimeInfo *partinfo) if (!name) name = _("unknown"); - label = g_strconcat(_("<b>Type: </b>"), content_type, " ", - _("<b>Size: </b>"), to_human_readable((goffset)partinfo->length), - "\n", _("<b>Filename: </b>"), name, NULL); + label = g_strconcat("<b>",_("Type:"), "</b> ", content_type, " <b>", + _("Size:"), "</b> ", to_human_readable((goffset)partinfo->length), + "\n", "<b>", _("Filename:"), "</b> ", name, NULL); gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, diff --git a/src/plugins/attachwarner/attachwarner.c b/src/plugins/attachwarner/attachwarner.c @@ -206,9 +206,9 @@ static gboolean attwarn_before_send_hook(gpointer source, gpointer data) debug_print("user has to decide\n"); if (compose->sending) - button_label = _("+_Send"); + button_label = g_strconcat("+", _("_Send"), NULL); else - button_label = _("+_Queue"); + button_label = g_strconcat("+", _("_Queue"), NULL); message = g_strdup_printf( _("An attachment is mentioned in the mail you're sending, but no file was attached. Mention appears on line %d, which begins with text: <span weight=\"bold\">%.20s</span>...\n\n%s it anyway?"), diff --git a/src/plugins/gdata/cm_gdata_contacts.c b/src/plugins/gdata/cm_gdata_contacts.c @@ -1,5 +1,6 @@ /* GData plugin for Claws-Mail * Copyright (C) 2011 Holger Berndt + * Copyright (C) 2011-2015 the Claws Mail team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -336,9 +337,9 @@ static void cm_gdata_query_contacts_ready(GDataContactsService *service, GAsyncR } g_object_unref(feed); contacts_cache.contacts = g_slist_reverse(contacts_cache.contacts); - /* i18n: First part of "Added X of Y contacts to cache" */ + /* TRANSLATORS: First part of "Added X of Y contacts to cache" */ tmpstr1 = g_strdup_printf(ngettext("Added %d of", "Added %d of", num_contacts_added), num_contacts_added); - /* i18n: Second part of "Added X of Y contacts to cache" */ + /* TRANSLATORS: Second part of "Added X of Y contacts to cache" */ tmpstr2 = g_strdup_printf(ngettext("1 contact to the cache", "%d contacts to the cache", num_contacts), num_contacts); log_message(LOG_PROTOCOL, "%s %s\n", tmpstr1, tmpstr2); g_free(tmpstr1); diff --git a/src/plugins/libravatar/libravatar_prefs.c b/src/plugins/libravatar/libravatar_prefs.c @@ -133,13 +133,13 @@ static GtkWidget *labeled_spinner_box(gchar *label, GtkWidget *spinner, gchar *u static gchar *avatar_stats_label_markup(AvatarCacheStats *stats) { if (stats == NULL) - return g_strdup( - _("<span color=\"red\">Error reading cache stats</span>")); + return g_strdup(g_strconcat("<span color=\"red\">", + _("Error reading cache stats"), "</span>", NULL)); if (stats->errors > 0) - return g_markup_printf_escaped( - _("<span color=\"red\">Using %s in %d files, %d " - "directories, %d others and %d errors</span>"), + return g_markup_printf_escaped(g_strconcat("<span color=\"red\">", + _("Using %s in %d files, %d " + "directories, %d others and %d errors"), "</span>", NULL), to_human_readable((goffset) stats->bytes), stats->files, stats->dirs, @@ -184,8 +184,8 @@ static void cache_clean_button_clicked_cb(GtkButton *button, gpointer data) "• %u missing entries removed.\n" "• %u files removed."), misses, acr->removed); - gtk_label_set_markup(label, - _("<span color=\"#006400\">Icon cache successfully cleared!</span>")); + gtk_label_set_markup(label, g_strconcat("<span color=\"#006400\">", + _("Icon cache successfully cleared!"), "</span>", NULL)); } else { alertpanel_warning(_("Errors clearing icon cache:\n" @@ -194,8 +194,8 @@ static void cache_clean_button_clicked_cb(GtkButton *button, gpointer data) "• %u files failed to be read.\n" "• %u files couldn't be removed."), misses, acr->removed, acr->e_stat, acr->e_unlink); - gtk_label_set_markup(label, - _("<span color=\"red\">Error clearing icon cache.</span>")); + gtk_label_set_markup(label, g_strconcat("<span color=\"red\">", + _("Error clearing icon cache."), "</span>", NULL)); } gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE); g_free(acr); diff --git a/src/plugins/managesieve/sieve_editor.c b/src/plugins/managesieve/sieve_editor.c @@ -430,7 +430,7 @@ static gboolean sieve_editor_confirm_close(SieveEditorPage *page) if (page->modified) { switch (alertpanel(_("Save changes"), _("This script has been modified. Save the latest changes?"), - _("_Discard"), _("+_Save"), GTK_STOCK_CANCEL)) { + _("_Discard"), g_strconcat("+", _("_Save"), NULL), GTK_STOCK_CANCEL)) { case G_ALERTDEFAULT: return TRUE; case G_ALERTALTERNATE: diff --git a/src/plugins/pgpcore/passphrase.c b/src/plugins/pgpcore/passphrase.c @@ -257,18 +257,21 @@ create_description(const gchar *uid_hint, gint prev_bad, gint new_key) *(strchr(my_uid, '>')) = ')'; if (new_key == 1) { - buf = g_strdup_printf (_("<span weight=\"bold\" size=\"larger\">%sPlease enter the passphrase for the new key:</span>\n\n" - "%.*s\n"), + buf = g_strdup_printf (g_strconcat("<span weight=\"bold\" size=\"larger\">%s", + _("Please enter the passphrase for the new key:"), + "</span>\n\n%.*s\n", NULL), prev_bad ? _("Passphrases did not match.\n") : "", linelen (my_uid), my_uid); } else if (new_key == 2) { - buf = g_strdup_printf (_("<span weight=\"bold\" size=\"larger\">Please re-enter the passphrase for the new key:</span>\n\n" - "%.*s\n"), + buf = g_strdup_printf (g_strconcat("<span weight=\"bold\" size=\"larger\">", + _("Please re-enter the passphrase for the new key:"), + "</span>\n\n%.*s\n", NULL), linelen (my_uid), my_uid); } else { - buf = g_strdup_printf (_("<span weight=\"bold\" size=\"larger\">%sPlease enter the passphrase for:</span>\n\n" - "%.*s\n"), + buf = g_strdup_printf (g_strconcat("<span weight=\"bold\" size=\"larger\">%s", + _("Please enter the passphrase for:"), + "</span>\n\n%.*s\n", NULL), prev_bad ? _("Bad passphrase.\n") : "", linelen (my_uid), my_uid); diff --git a/src/plugins/pgpcore/select-keys.c b/src/plugins/pgpcore/select-keys.c @@ -607,7 +607,7 @@ use_untrusted (gpgme_key_t key, gpgme_user_id_t uid, gpgme_protocol_t proto) buf = g_strdup_printf(_("This encryption key is not fully trusted.\n" "If you choose to encrypt the message with this key, you don't\n" "know for sure that it will go to the person you mean it to.\n\n" - "Key details: ID %s, primary identity %s &lt;%s&gt;\n\n" + "Key details: ID %s, primary identity %s <%s>\n\n" "Do you trust this key enough to use it anyway?"), key->subkeys->keyid, key->uids->name, key->uids->email); aval = alertpanel diff --git a/src/plugins/pgpcore/sgpgme.c b/src/plugins/pgpcore/sgpgme.c @@ -356,7 +356,8 @@ gchar *sgpgme_sigstat_info_full(gpgme_ctx_t ctx, gpgme_verify_result_t status) key->uids = key->uids ? key->uids->next : NULL; while (key->uids != NULL) { g_string_append_printf(siginfo, - _(" uid \"%s\" (Validity: %s)\n"), + g_strconcat(" ", + _("uid \"%s\" (Validity: %s)\n"), NULL), key->uids->uid, key->uids->revoked==TRUE?_("Revoked"):get_validity_str(key->uids->validity)); j++; diff --git a/src/plugins/rssyl/rssyl_feed_props.c b/src/plugins/rssyl/rssyl_feed_props.c @@ -385,7 +385,7 @@ void rssyl_gtk_prop(RFolderItem *ritem) gtk_box_pack_start(GTK_BOX(vbox), urlframe, FALSE, FALSE, 0); /* Label for URL frame */ - urllabel = gtk_label_new(_("<b>Source URL:</b>")); + urllabel = gtk_label_new(g_strconcat("<b>",_("Source URL:"),"</b>", NULL)); gtk_label_set_use_markup(GTK_LABEL(urllabel), TRUE); gtk_misc_set_padding(GTK_MISC(urllabel), 5, 0); gtk_frame_set_label_widget(GTK_FRAME(urlframe), urllabel); @@ -430,8 +430,9 @@ void rssyl_gtk_prop(RFolderItem *ritem) row++; /* Fetch comments max age - label */ - label = gtk_label_new(_("<b>Fetch comments on posts aged less than:</b>\n" - "<small>(In days; set to -1 to fetch all comments)</small>")); + label = gtk_label_new(g_strconcat("<b>",_("Fetch comments on posts aged less than:"),"</b>\n" + "<small>",_("(In days; set to -1 to fetch all comments)"), "</small>", + NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1, @@ -488,9 +489,9 @@ void rssyl_gtk_prop(RFolderItem *ritem) row++; /* Refresh interval - label */ - label = gtk_label_new(_("<b>Refresh interval in minutes:</b>\n" - "<small>(Set to 0 to disable automatic refreshing for this feed)" - "</small>")); + label = gtk_label_new(g_strconcat("<b>",_("Refresh interval in minutes:"),"</b>\n" + "<small>",_("(Set to 0 to disable automatic refreshing for this feed)"), + "</small>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1, @@ -514,7 +515,7 @@ void rssyl_gtk_prop(RFolderItem *ritem) row++; /* Silent update - label */ silent_update_label = - gtk_label_new(_("<b>If an item changes, do not mark it as new:</b>")); + gtk_label_new(g_strconcat("<b>",_("If an item changes, do not mark it as new:"),"</b>", NULL)); gtk_label_set_use_markup(GTK_LABEL(silent_update_label), TRUE); gtk_misc_set_alignment(GTK_MISC(silent_update_label), 0, 0.5); gtk_table_attach(GTK_TABLE(table), silent_update_label, 0, 1, row, row+1, diff --git a/src/plugins/rssyl/rssyl_subscribe_gtk.c b/src/plugins/rssyl/rssyl_subscribe_gtk.c @@ -61,7 +61,7 @@ void rssyl_subscribe_dialog(RSubCtx *ctx) { gtk_frame_set_shadow_type(GTK_FRAME(titleframe), GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start(GTK_BOX(vbox), titleframe, FALSE, FALSE, 0); - titlelabel = gtk_label_new(_("<b>Feed folder:</b>")); + titlelabel = gtk_label_new(g_strconcat("<b>",_("Feed folder:"),"</b>", NULL)); gtk_label_set_use_markup(GTK_LABEL(titlelabel), TRUE); gtk_misc_set_padding(GTK_MISC(titlelabel), 5, 0); gtk_frame_set_label_widget(GTK_FRAME(titleframe), titlelabel); diff --git a/src/plugins/vcalendar/vcal_meeting_gtk.c b/src/plugins/vcalendar/vcal_meeting_gtk.c @@ -1595,13 +1595,13 @@ static VCalMeeting *vcal_meeting_create_real(VCalEvent *event, gboolean visible) date_hbox = gtk_hbox_new(FALSE, 6); date_vbox = gtk_vbox_new(FALSE, 6); hbox = gtk_hbox_new(FALSE, 6); - label = gtk_label_new(_("<b>Starts at:</b> ")); + label = gtk_label_new(g_strconcat("<b>",_("Starts at:"),"</b> ",NULL)); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), meet->start_time, FALSE, FALSE, 0); - label = gtk_label_new(_("<b> on:</b>")); + label = gtk_label_new(g_strconcat("<b> ",_("on:"),"</b>",NULL)); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); @@ -1619,13 +1619,13 @@ static VCalMeeting *vcal_meeting_create_real(VCalEvent *event, gboolean visible) date_vbox = gtk_vbox_new(FALSE, 6); hbox = gtk_hbox_new(FALSE, 6); - label = gtk_label_new(_("<b>Ends at:</b> ")); + label = gtk_label_new(g_strconcat("<b>",_("Ends at:"),"</b> ", NULL)); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), meet->end_time, FALSE, FALSE, 0); - label = gtk_label_new(_("<b> on:</b>")); + label = gtk_label_new(g_strconcat("<b> ",_("on:"),"</b>",NULL)); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); diff --git a/src/plugins/vcalendar/vcalendar.c b/src/plugins/vcalendar/vcalendar.c @@ -561,13 +561,16 @@ void vcalviewer_display_event (VCalViewer *vcalviewer, VCalEvent *event) /* start */ if (event->start && *(event->start)) { if (event->recur && *(event->recur)) { - gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event recurs)</span>"), + gchar *tmp = g_strdup_printf(g_strconcat("%s <span weight=\"bold\">", + _("(this event recurs)"),"</span>", NULL), event->start); GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp); gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE); g_free(tmp); } else if (event->rec_occurence) { - gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event is part of a recurring event)</span>"), + gchar *tmp = g_strdup_printf(g_strconcat("%s <span weight=\"bold\">", + _("(this event is part of a recurring event)"), + "</span>", NULL), event->start); GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp); gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE); @@ -1087,8 +1090,8 @@ static gboolean vcalviewer_action_cb(GtkButton *widget, gpointer data) AlertValue val = alertpanel_full(_("No account found"), _("You have no account matching any attendee.\n" "Do you want to reply anyway?"), - GTK_STOCK_CANCEL, _("+Reply anyway"), NULL, FALSE, - NULL, ALERT_QUESTION, G_ALERTDEFAULT); + GTK_STOCK_CANCEL, g_strconcat("+", _("Reply anyway"), NULL), + NULL, FALSE, NULL, ALERT_QUESTION, G_ALERTDEFAULT); if (val == G_ALERTALTERNATE) { account = account_get_default(); vcal_manager_update_answer(event, account->address, diff --git a/src/prefs_account.c b/src/prefs_account.c @@ -1143,8 +1143,9 @@ static void basic_create_widget_func(PrefsPage * _page, no_imap_warn_icon = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR); - no_imap_warn_label = gtk_label_new(_("<span weight=\"bold\">Warning: this version of Claws Mail\n" - "has been built without IMAP and News support.</span>")); + no_imap_warn_label = gtk_label_new(g_strconcat("<span weight=\"bold\">", + _("Warning: this version of Claws Mail\n" + "has been built without IMAP and News support."), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(no_imap_warn_label), TRUE); gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_icon, FALSE, FALSE, 0); diff --git a/src/prefs_actions.c b/src/prefs_actions.c @@ -897,12 +897,12 @@ static void prefs_actions_cancel(GtkWidget *w, gpointer data) if (modified && alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } else if (modified_list && alertpanel(_("Actions list not saved"), _("The actions list has been modified. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } @@ -928,7 +928,7 @@ static void prefs_actions_ok(GtkWidget *widget, gpointer data) if (modified && alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } diff --git a/src/prefs_filtering.c b/src/prefs_filtering.c @@ -1474,7 +1474,7 @@ static gboolean prefs_filtering_check_mod(gboolean check_changed_list) if (check_changed_list) { if (modified && alertpanel(_("Filtering rules not saved"), _("The list of filtering rules have been modified. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return TRUE; } @@ -1496,7 +1496,7 @@ static gboolean prefs_filtering_check_mod(gboolean check_changed_list) if (!filtering_str) { val = alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), NULL); + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"),NULL), NULL); if (G_ALERTDEFAULT != val) { g_free(filtering_str); g_free(str); /* fixed two leaks: huzzah! */ @@ -1518,7 +1518,7 @@ static gboolean prefs_filtering_check_mod(gboolean check_changed_list) strlen(action)) { val = alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), NULL); + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL); if (G_ALERTDEFAULT != val) { g_free(name); g_free(condition); diff --git a/src/prefs_folder_item.c b/src/prefs_folder_item.c @@ -264,10 +264,10 @@ static void prefs_folder_item_general_create_widget_func(PrefsPage * page_, rowcount = 0; if (!can_save) { - no_save_warning = gtk_label_new( - _("<i>These preferences will not be saved as this folder " + no_save_warning = gtk_label_new(g_strconcat("<i>", + _("These preferences will not be saved as this folder " "is a top-level folder. However, you can set them for the " - "whole mailbox tree by using \"Apply to subfolders\".</i>")); + "whole mailbox tree by using \"Apply to subfolders\"."), "</i>", NULL)); gtk_label_set_use_markup(GTK_LABEL(no_save_warning), TRUE); gtk_label_set_line_wrap(GTK_LABEL(no_save_warning), TRUE); gtk_misc_set_alignment(GTK_MISC(no_save_warning), 0.0, 0.5); @@ -872,10 +872,10 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_, rowcount = 0; if (!can_save) { - no_save_warning = gtk_label_new( - _("<i>These preferences will not be saved as this folder " + no_save_warning = gtk_label_new(g_strconcat("<i>", + _("These preferences will not be saved as this folder " "is a top-level folder. However, you can set them for the " - "whole mailbox tree by using \"Apply to subfolders\".</i>")); + "whole mailbox tree by using \"Apply to subfolders\"."), "</i>", NULL)); gtk_label_set_use_markup(GTK_LABEL(no_save_warning), TRUE); gtk_label_set_line_wrap(GTK_LABEL(no_save_warning), TRUE); gtk_misc_set_alignment(GTK_MISC(no_save_warning), 0.0, 0.5); @@ -1398,10 +1398,10 @@ static void prefs_folder_item_templates_create_widget_func(PrefsPage * page_, gtk_widget_show (page_vbox); if (!can_save) { - no_save_warning = gtk_label_new( - _("<i>These preferences will not be saved as this folder " + no_save_warning = gtk_label_new(g_strconcat("<i>", + _("These preferences will not be saved as this folder " "is a top-level folder. However, you can set them for the " - "whole mailbox tree by using \"Apply to subfolders\".</i>")); + "whole mailbox tree by using \"Apply to subfolders\"."), "</i>", NULL)); gtk_label_set_use_markup(GTK_LABEL(no_save_warning), TRUE); gtk_label_set_line_wrap(GTK_LABEL(no_save_warning), TRUE); gtk_misc_set_alignment(GTK_MISC(no_save_warning), 0.0, 0.5); @@ -1684,8 +1684,8 @@ static void clean_cache_cb(GtkWidget *widget, gpointer data) if (alertpanel_full(_("Discard cache"), _("Do you really want to discard the local cached " "data for this folder?"), - GTK_STOCK_CANCEL, _("+Discard"), NULL, FALSE, - NULL, ALERT_WARNING, G_ALERTDEFAULT) + GTK_STOCK_CANCEL, g_strconcat("+", _("Discard"), NULL), + NULL, FALSE, NULL, ALERT_WARNING, G_ALERTDEFAULT) != G_ALERTALTERNATE) return; diff --git a/src/prefs_matcher.c b/src/prefs_matcher.c @@ -2137,7 +2137,9 @@ static void prefs_matcher_ok(void) if (!matcher_str || strcmp(matcher_str, str) != 0) { val = alertpanel(_("Entry not saved"), _("The entry was not saved.\nClose anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), NULL); + GTK_STOCK_CLOSE, + g_strconcat("+", _("_Continue editing"), NULL), + NULL); if (G_ALERTDEFAULT != val) { g_free(matcher_str); g_free(str); diff --git a/src/prefs_template.c b/src/prefs_template.c @@ -571,7 +571,7 @@ static void prefs_template_ok_cb(gpointer action, gpointer data) if (modified && alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } @@ -596,12 +596,12 @@ static void prefs_template_cancel_cb(gpointer action, gpointer data) if (modified && alertpanel(_("Entry not saved"), _("The entry was not saved. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } else if (modified_list && alertpanel(_("Templates list not saved"), _("The templates list has been modified. Close anyway?"), - GTK_STOCK_CLOSE, _("+_Continue editing"), + GTK_STOCK_CLOSE, g_strconcat("+", _("_Continue editing"), NULL), NULL) != G_ALERTDEFAULT) { return; } diff --git a/src/procheader.c b/src/procheader.c @@ -843,7 +843,6 @@ static gint procheader_scan_date_string(const gchar *str, /* RFC3339 subset, with fraction of second */ result = sscanf(str, "%4d-%2d-%2d%c%2d:%2d:%2d.%d%6s", year, &month_n, day, &sep1, hh, mm, ss, &secfract, zonestr); - debug_print("str |%s|, result %d\n", str, result); if (result == 9 && (sep1 == 'T' || sep1 == 't' || sep1 == ' ')) { if (month_n >= 1 && month_n <= 12) { @@ -861,7 +860,6 @@ static gint procheader_scan_date_string(const gchar *str, /* RFC3339 subset, no fraction of second */ result = sscanf(str, "%4d-%2d-%2d%c%2d:%2d:%2d%6s", year, &month_n, day, &sep1, hh, mm, ss, zonestr); - debug_print("str |%s|, result %d\n", str, result); if (result == 8 && (sep1 == 'T' || sep1 == 't' || sep1 == ' ')) { if (month_n >= 1 && month_n <= 12) { diff --git a/src/summaryview.c b/src/summaryview.c @@ -3417,14 +3417,18 @@ static inline void summary_set_header(SummaryView *summaryview, gchar *text[], _("(No Subject)"); if ((vert_layout || small_layout) && prefs_common.two_line_vert) { if (!FOLDER_SHOWS_TO_HDR(summaryview->folder_item)) { - gchar *tmp = g_markup_printf_escaped(_("%s\n<span color='%s' style='italic'>From: %s, on %s</span>"), + gchar *tmp = g_markup_printf_escaped(g_strconcat("%s\n", + "<span color='%s' style='italic'>", + _("From: %s, on %s"), "</span>", NULL), text[col_pos[S_COL_SUBJECT]], color_dim_rgb, text[col_pos[S_COL_FROM]], text[col_pos[S_COL_DATE]]); text[col_pos[S_COL_SUBJECT]] = tmp; } else { - gchar *tmp = g_markup_printf_escaped(_("%s\n<span color='%s' style='italic'>To: %s, on %s</span>"), + gchar *tmp = g_markup_printf_escaped(g_strconcat("%s\n", + "<span color='%s' style='italic'>", + _("To: %s, on %s"), "</span>", NULL), text[col_pos[S_COL_SUBJECT]], color_dim_rgb, text[col_pos[S_COL_TO]], diff --git a/src/wizard.c b/src/wizard.c @@ -965,7 +965,8 @@ static GtkWidget* user_page (WizardWindow * wizard) gtk_table_set_row_spacings(GTK_TABLE(user_table), VSPACING_NARROW); gtk_box_pack_start(GTK_BOX(vbox), user_table, FALSE, FALSE, 0); - label = gtk_label_new(_("<span weight=\"bold\">Your name:</span>")); + label = gtk_label_new(g_strconcat("<span weight=\"bold\">", _("Your name:"), + "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); gtk_table_attach(GTK_TABLE(user_table), label, 0,1,0,1, @@ -975,7 +976,8 @@ static GtkWidget* user_page (WizardWindow * wizard) gtk_table_attach(GTK_TABLE(user_table), wizard->full_name, 1,2,0,1, GTK_EXPAND|GTK_FILL, 0, 0, 0); - label = gtk_label_new(_("<span weight=\"bold\">Your email address:</span>")); + label = gtk_label_new(g_strconcat("<span weight=\"bold\">", _("Your email address:"), + "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); gtk_table_attach(GTK_TABLE(user_table), label, 0,1,1,2, @@ -1018,7 +1020,8 @@ static GtkWidget* mailbox_page (WizardWindow * wizard) hbox = gtk_hbox_new(FALSE, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - wizard->mailbox_label = gtk_label_new(_("<span weight=\"bold\">Mailbox name:</span>")); + wizard->mailbox_label = gtk_label_new(g_strconcat("<span weight=\"bold\">", + _("Mailbox name:"), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->mailbox_label), TRUE); if (GTK_IS_MISC(wizard->mailbox_label)) gtk_misc_set_alignment(GTK_MISC(wizard->mailbox_label), 1, 0.5); @@ -1100,8 +1103,8 @@ static GtkWidget* smtp_page (WizardWindow * wizard) _("You can specify the port number by appending it at the end: " "\"mail.example.com:25\"")); - PACK_BOX(hbox, _("<span weight=\"bold\">SMTP server address:</span>"), - wizard->smtp_server); + PACK_BOX(hbox, g_strconcat("<span weight=\"bold\">", _("SMTP server address:"), + "</span>", NULL), wizard->smtp_server); hbox = gtk_hbox_new(FALSE, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); @@ -1114,7 +1117,8 @@ static GtkWidget* smtp_page (WizardWindow * wizard) wizard); gtk_box_pack_start(GTK_BOX(hbox), wizard->smtp_auth, FALSE, FALSE, 0); - label = gtk_label_new(_("<span size=\"small\">(empty to use the same as receive)</span>")); + label = gtk_label_new(g_strconcat("<span size=\"small\">", + _("(empty to use the same as receive)"), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); SET_TOGGLE_SENSITIVITY (wizard->smtp_auth, label); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0); @@ -1242,7 +1246,9 @@ static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol) gtk_widget_hide(wizard->auto_configure_cancel_btn); gtk_widget_show(wizard->auto_configure_lbl); #endif - gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>")); + gtk_label_set_text(GTK_LABEL(wizard->recv_label), + g_strconcat("<span weight=\"bold\">", _("Server address:"), + "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE); gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE); g_free(text); @@ -1272,7 +1278,9 @@ static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol) gtk_widget_hide(wizard->auto_configure_cancel_btn); gtk_widget_show(wizard->auto_configure_lbl); #endif - gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Server address:</span>")); + gtk_label_set_text(GTK_LABEL(wizard->recv_label), + g_strconcat("<span weight=\"bold\">", _("Server address:"), + "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE); gtk_dialog_set_response_sensitive (GTK_DIALOG(wizard->window), GO_FORWARD, TRUE); g_free(text); @@ -1302,7 +1310,9 @@ static void wizard_protocol_change(WizardWindow *wizard, RecvProtocol protocol) #endif } else if (protocol == A_LOCAL) { gtk_entry_set_text(GTK_ENTRY(wizard->recv_server), tmpl.mboxfile?tmpl.mboxfile:""); - gtk_label_set_text(GTK_LABEL(wizard->recv_label), _("<span weight=\"bold\">Local mailbox:</span>")); + gtk_label_set_text(GTK_LABEL(wizard->recv_label), + g_strconcat("<span weight=\"bold\">", _("Local mailbox:"), + "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE); gtk_widget_hide(wizard->no_imap_warning); gtk_widget_hide(wizard->recv_imap_label); @@ -1470,7 +1480,7 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_box_pack_start(GTK_BOX(vbox), recv_table, FALSE, FALSE, 0); - label = gtk_label_new(_("<span weight=\"bold\">Server type:</span>")); + label = gtk_label_new(g_strconcat("<span weight=\"bold\">", _("Server type:"), "</span>", NULL)); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_table_attach(GTK_TABLE(recv_table), label, 0,1,0,1, @@ -1523,7 +1533,8 @@ static GtkWidget* recv_page (WizardWindow * wizard) G_CALLBACK (auto_configure_cb), wizard); #endif - wizard->recv_label = gtk_label_new(_("<span weight=\"bold\">Server address:</span>")); + wizard->recv_label = gtk_label_new(g_strconcat("<span weight=\"bold\">", + _("Server address:"), "</span>", NULL)); gtk_misc_set_alignment(GTK_MISC(wizard->recv_label), 1, 0.5); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_label), TRUE); gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_label, 0,1,2,3, @@ -1539,7 +1550,8 @@ static GtkWidget* recv_page (WizardWindow * wizard) gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_server, 1,2,2,3, GTK_EXPAND|GTK_FILL, 0, 0, 0); - wizard->recv_username_label = gtk_label_new(_("<span weight=\"bold\">Username:</span>")); + wizard->recv_username_label = gtk_label_new(g_strconcat("<span weight=\"bold\">", + _("Username:"),"</span>", NULL)); gtk_misc_set_alignment(GTK_MISC(wizard->recv_username_label), 1, 0.5); gtk_label_set_use_markup(GTK_LABEL(wizard->recv_username_label), TRUE); gtk_table_attach(GTK_TABLE(recv_table), wizard->recv_username_label, 0,1,3,4, @@ -1647,9 +1659,9 @@ static GtkWidget* recv_page (WizardWindow * wizard) hbox = gtk_hbox_new(FALSE, VSPACING_NARROW); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - wizard->no_imap_warning = gtk_label_new(_( - "<span weight=\"bold\">Warning: this version of Claws Mail\n" - "has been built without IMAP support.</span>")); + wizard->no_imap_warning = gtk_label_new(g_strconcat("<span weight=\"bold\">", + _("Warning: this version of Claws Mail\n" + "has been built without IMAP support."), "</span>", NULL)); gtk_label_set_use_markup(GTK_LABEL(wizard->no_imap_warning), TRUE); gtk_box_pack_start(GTK_BOX(hbox), wizard->no_imap_warning, FALSE, FALSE, 0); diff --git a/tools/alternative-tlds.txt b/tools/alternative-tlds.txt @@ -0,0 +1,48 @@ +# NameCoin +BIT +# EmerCoin +BAZAR +COIN +EMC +LIB +# Name.Space +ART +BOOKS +CHAT +DESIGN +FILM +HELP +INC +LAW +MUSIC +NEWS +PRESS +RADIO +SHOP +TALK +UNION +VIDEO +WORLD +ZONE +# OpenNIC +BBS +DYN +FREE +FUR +GEEK +GOPHER +INDY +ING +MICRO +NEO +NULL +OSS +OZ +PARODY +PIRATE +# Tor Project +ONION +# GNU Name System +GNU +# Invisible Internet Project +I2P diff --git a/tools/claws.get.tlds.pl b/tools/claws.get.tlds.pl @@ -4,6 +4,9 @@ claws.get.tlds.pl - IANA TLDs online list to stdout as gchar* array. +Syntax: + claws.get.tlds.pl [extra-domains.txt] > src/common/tlds.h + Copyright (c) 2015 Ricardo Mones <ricardo@mones.org> This program is free software: you can redistribute it and/or modify it @@ -32,12 +35,23 @@ print "#ifndef __TLDS_H__\n#define __TLDS_H__\n\n"; print "static const gchar *toplvl_domains [] = {\n\t"; # open array my $payload = get URL; -my @lines = split /^/, $payload; +die "Unable to retrieve IANA list of TLDs\n" unless defined $payload; +my @lines = map { chomp; $_ } split /^/, $payload; my ($i, $j) = (0, 0); +if (defined $ARGV[0] and -f $ARGV[0]) { + my %domains = (); + foreach (@lines) { $domains{$_} = "" unless (/^#.*$/) } + open my $fh, '<', $ARGV[0] or die "Unable to open $ARGV[0] for reading\n"; + while (<$fh>) { + chomp; + push @lines, $_ if (/^#.*/ or not defined $domains{$_}); + } + close $fh; +} + foreach (@lines) { ++$i; - chomp; if (/^#(.*)$/) { # comments my $c = $1; $c =~ s/^\s+|\s+$//g; print "/* $c */\n\t";